/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package senoapache;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter;
import java.util.concurrent.DelayQueue;

/**
 *
 * @author james
 */
public class SenoApache {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        System.out.println("Hello WOrld");
//        copiar("/home/james/Tomcat/conf/httpdx2","/home/james/Tomcat/conf/httpdx3");
//        modificarConf("/home/james/Tomcat/conf/httpdx","/home/james/Tomcat/conf/httpdx2","/home/james/Tomcat/conf/flags");
//        copiar("/home/james/Tomcat/conf/httpdx2","/home/james/Tomcat/conf/httpdx");
        for (int i = 0; i < 10; i++) {
            modificarConf("/home/james/Tomcat/conf/httpdx.conf","/home/james/Tomcat/conf/httpdx2","/home/james/Tomcat/conf/flags");
            copiar("/home/james/Tomcat/conf/httpdx2","/home/james/Tomcat/conf/httpdx.conf");
            try {
                Thread.sleep(1000);
            } catch (Exception e) {
            }
        }
        
    }
    
    public static void modificarConf(String rutaLectura,String rutaEscritura,String flags){
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        try {
            // Apertura del fichero y creacion de BufferedReader para poder
            // hacer una lectura comoda (disponer del metodo readLine()).
            archivo = new File (rutaLectura);
            fr = new FileReader (archivo);
            br = new BufferedReader(fr);
            
            //Variables para escribir
            FileWriter fichero = null;
            PrintWriter pw = null;
            
            //Escritura en Archivo
            fichero = new FileWriter(rutaEscritura);
            pw = new PrintWriter(fichero);            
            
            String linea="";
            int falgS=1,falgI=0;//Flag Superior, Flag Inferior, Flag Master, Para correr solo al inicio
            int dimension=10;//De cuanto en cuanto sube o baja la funcion SENO
            int minor=200;//Limite Inferior
            int major=500;//Limite Superior
            while((linea=br.readLine())!=null){
                try {
                    //System.out.println("---"+linea.substring(0, 13)+"-");
                    if((linea.substring(0, 13).equals("	 MaxClients "))){
                        String aux="";
                        aux=leerMC(flags);
//                            System.out.println("asdfg"+aux+"--");
//                            System.out.println("-->"+aux.substring(0,3));//Cantidad de MC Actual
//                            System.out.println("-->"+aux.substring(4,5));//Cantidad de Sp
//                            System.out.println("-->"+aux.substring(6,7));//Cantidad de In
                        falgS=Integer.parseInt(aux.substring(4,5));
                        falgI=Integer.parseInt(aux.substring(6,7));
                        if(Integer.parseInt(linea.substring(13,16))>=major){
                            System.out.println("WWWWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
                            falgS=0;
                            falgI=1;
                        }
                        if(Integer.parseInt(linea.substring(13,16))<=minor){
                            System.out.println("WWWWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
                            falgS=1;
                            falgI=0;
                        }

                        if(Integer.parseInt(linea.substring(13,16))==500){
                            System.out.println("axuSUP");
                            falgS=0;
                            falgI=1;
                        }
                        if(Integer.parseInt(linea.substring(13,16))==200){
                            System.out.println("axuINF");
                            falgS=1;
                            falgI=0;
                        }
                        
                        if(falgS==1&&falgI==0){
                            linea=(linea.substring(0, 13)+String.valueOf(Integer.parseInt(linea.substring(13,16))+dimension));
//                            System.out.println("--Probando--"+linea);
                            guardarMC(flags,Integer.parseInt(linea.substring(13,16))+","+falgS+","+falgI);
                        }
                        if(falgS==0&&falgI==1){
                            linea=(linea.substring(0, 13)+String.valueOf(Integer.parseInt(linea.substring(13,16))-dimension));
//                            System.out.println("-*-Probando-*-"+linea);
                            guardarMC(flags,Integer.parseInt(linea.substring(13,16))+","+falgS+","+falgI);
                        }
                    }
                } catch (Exception e) {
                }
                
                System.out.println(linea);
                pw.println(linea);
            }

        }
        catch(Exception e){
            e.printStackTrace();
        }finally{
            // En el finally cerramos el fichero, para asegurarnos
            // que se cierra tanto si todo va bien como si salta 
            // una excepcion.
            try{                    
                if( null != fr ){   
                    fr.close();     
                }                  
            }catch (Exception e2){ 
                e2.printStackTrace();
            }
        }
    }
    
    public static void copiar(String rutaLectura,String rutaEscritura){
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        try {
            // Apertura del fichero y creacion de BufferedReader para poder
            // hacer una lectura comoda (disponer del metodo readLine()).
            archivo = new File (rutaLectura);
            fr = new FileReader (archivo);
            br = new BufferedReader(fr);
            
            //Variables para escribir
            FileWriter fichero = null;
            PrintWriter pw = null;
            
            //Escritura en Archivo
            fichero = new FileWriter(rutaEscritura);
            pw = new PrintWriter(fichero);
            String linea="";
            int falgS=1,falgI=0;
            while((linea=br.readLine())!=null){
                //System.out.println(linea);
                pw.println(linea);
            }

        }
        catch(Exception e){
            e.printStackTrace();
        }finally{
            // En el finally cerramos el fichero, para asegurarnos
            // que se cierra tanto si todo va bien como si salta 
            // una excepcion.
            try{                    
                if( null != fr ){   
                    fr.close();     
                }                  
            }catch (Exception e2){ 
                e2.printStackTrace();
            }
        }
    }
    
    public static void guardarMC(String flags,String variable){
        FileWriter fichero = null;
        PrintWriter pw = null;
        try
        {
            fichero = new FileWriter(flags);
            pw = new PrintWriter(fichero);
            pw.println(variable);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
           try {
           // Nuevamente aprovechamos el finally para 
           // asegurarnos que se cierra el fichero.
           if (null != fichero)
              fichero.close();
           } catch (Exception e2) {
              e2.printStackTrace();
           }
        }
    }

    public static String leerMC(String flags) {
      File archivo = null;
      FileReader fr = null;
      BufferedReader br = null;
      String variable="";
      try {
         archivo = new File (flags);
         fr = new FileReader (archivo);
         br = new BufferedReader(fr);
         String linea;
         while((linea=br.readLine())!=null)
            variable=linea;
      }
      catch(Exception e){
         e.printStackTrace();
      }finally{
         try{                    
            if( null != fr ){   
               fr.close();     
            }                  
         }catch (Exception e2){ 
            e2.printStackTrace();
         }
      }
        return variable;
   }
}
